package org.malred.hotelsystem.utils;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import org.malred.hotelsystem.R;
import org.malred.hotelsystem.activities.BaseActivity;

import java.io.File;
import java.util.List;
import java.util.UUID;

/**
 * 数据库工具类
 */
public class DBUtil extends SQLiteOpenHelper {
    private static final String TAG = "DBUtil";
    // 上下文
    Context context;

    // 数据库名称
    private static final String DB_NAME = "hotel.db";
    // 数据库版本
    private static final int DB_VERSION = 1;
    SQLiteDatabase db;


    /**
     * 用于初始化创建数据库
     *
     * @param context
     */
    public DBUtil(Context context) {
        // 参数2: 数据库名称(存在则使用, 不存在则创建)
        // 只有数据库名,则默认去私有目录找 (com.xxx.xxx)
        // 带有路径, 则数据库在指定路径下
        super(context,
                context.getExternalFilesDir(null) + File.separator + DB_NAME, // 真机用
//                DB_NAME, // 虚拟机用这个
                null, DB_VERSION);
    }

    /**
     * 创建时调用
     *
     * @param db The database.
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        createUserTb(db);
        createHotelTb(db);
        createOrderTb(db);
    }

    public void createUserTb(SQLiteDatabase db) {
        Log.i(TAG, "onCreate: tb_user");
        db.execSQL("PRAGMA foreign_keys = false");
        db.execSQL("DROP TABLE IF EXISTS `tb_user`");
        // 建表语句
        String createTbSql =
                "CREATE TABLE `tb_user` ( \n" +
                        "  u_id TEXT NOT NULL,  \n" +
                        // 账号
                        "  u_name TEXT, \n " +
                        // 密码
                        "  u_pass TEXT, \n " +
                        // 权限 0-用户 1-管理
                        "  u_role TEXT, \n " +
                        "  PRIMARY KEY (u_id) )";
        db.execSQL(createTbSql);
        db.execSQL("INSERT INTO tb_user VALUES ('1','admin','admin','1')");
        db.execSQL("INSERT INTO tb_user VALUES ('2','user','123','0')");
        db.execSQL("PRAGMA foreign_keys = true");
    }

    public void createHotelTb(SQLiteDatabase db) {
        Log.i(TAG, "onCreate: tb_hotel_room");
        db.execSQL("PRAGMA foreign_keys = false");
        db.execSQL("DROP TABLE IF EXISTS `tb_hotel_room`");
        // 建表语句
        String createTbSql =
                "CREATE TABLE `tb_hotel_room` ( \n" +
                        " h_id TEXT NOT NULL,  \n" +
                        // 酒店房间标题
                        " h_title TEXT, \n " +
                        // 酒店房间描述
                        " h_desc TEXT, \n " +
                        // 剩多少间
                        " h_num INTEGER, \n " +
                        "  PRIMARY KEY (h_id) )";
        db.execSQL(createTbSql);
        for (int i = 0; i < 15; i++) {
            ContentValues values = new ContentValues();
            values.put("h_id", i + "");
            values.put("h_title", "王氏推拿主题房");
            values.put("h_desc", "王氏推拿主题房, 可享受正宗中医推拿理疗, 由来自韩国的海归留学生亲自服务");
            values.put("h_num", 100 + 5 * i);
            db.insert("tb_hotel_room", null, values);
        }
        db.execSQL("PRAGMA foreign_keys = true");
    }

    private void createOrderTb(SQLiteDatabase db) {
        Log.i(TAG, "onCreate: tb_order");
        db.execSQL("PRAGMA foreign_keys = false");
        db.execSQL("DROP TABLE IF EXISTS `tb_order`");
        // 建表语句
        String createTbSql =
                "CREATE TABLE `tb_order` ( \n" +
                        "  o_id TEXT NOT NULL,  \n" +
                        // 旅店房间id
                        "  h_id TEXT, \n " +
                        // 用户id
                        "  u_id TEXT, \n " +
                        // 状态 -1-无 0-已预订 1-已入住 2-已退订
                        "  o_status TEXT, \n " +
                        // 创建时间
                        "  o_date TEXT, \n " +
                        "  PRIMARY KEY (o_id) )";
        db.execSQL(createTbSql);
        for (int i = 0; i < 12; i++) {
            ContentValues values = new ContentValues();
            values.put("o_id", i + "");
            values.put("h_id", i + "");
            values.put("u_id", "1");
            values.put("o_status", 0);
            values.put("o_date", "2020-01-20");
            db.insert("tb_order", null, values);
        }
        db.execSQL("PRAGMA foreign_keys = true");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        createUserTb(db);
        createHotelTb(db);
    }
}
